home *** CD-ROM | disk | FTP | other *** search
/ Czech Logic, Card & Gambling Games / Logické hry.iso / hry / Fish Fillets / script / bathyscaph / code.lua next >
Text File  |  2005-07-16  |  14KB  |  379 lines

  1.  
  2.  
  3. -- -----------------------------------------------------------------
  4. -- Init
  5. -- -----------------------------------------------------------------
  6. local function prog_init()
  7.     initModels()
  8.     sound_playMusic("music/rybky07.ogg")
  9.     local pokus = getRestartCount()
  10.     local main = {}
  11.     local roompole = createArray(2)
  12.  
  13.  
  14.     -- -------------------------------------------------------------
  15.     local function prog_init_room()
  16.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  17.  
  18.         room.aktivni = main
  19.         room.poc = random(50 + pokus) + 100
  20.         room.halo = 0
  21.         room.mikros = 0
  22.         room.nemam = 200
  23.         room.odsud = 0
  24.         room.pronej = 10 + random(50)
  25.         room.uhnu = 500 + random(500)
  26.         room.teduz = 0
  27.  
  28.         return function()
  29.             switch(room.aktivni){
  30.                 [main] = function()
  31.                     if room.poc > 0 then
  32.                         room.poc = room.poc - 1
  33.                     else
  34.                         pomb1 = zluty.X == ztel.X and zluty.Y + 3 == ztel.Y
  35.                         pomb2 = modry.X == mtel.X and modry.Y + 3 == mtel.Y
  36.                         room.poc = random(80) + 50
  37.                         room.zvon = 0
  38.                         if pomb1 then
  39.                             if pomb2 then
  40.                                 if odd(random(10)) then
  41.                                     room.aktivni = zluty
  42.                                 else
  43.                                     room.aktivni = modry
  44.                                 end
  45.                             else
  46.                                 room.aktivni = zluty
  47.                             end
  48.                         elseif pomb2 then
  49.                             room.aktivni = modry
  50.                         else
  51.                             room.aktivni = ibudik
  52.                         end
  53.                     end
  54.                 end,
  55.                 [zluty] = function()
  56.                     if room.poc == 0 then
  57.                         zluty:killSound()
  58.                         room.poc = random(30) + 30
  59.                         room.aktivni = main
  60.                         zluty.afaze = 0
  61.                     else
  62.                         room.poc = room.poc - 1
  63.                         if room.pronej > 0 then
  64.                             room.pronej = room.pronej - 1
  65.                         end
  66.                         if zluty.X == ztel.X and zluty.Y + 3 == ztel.Y then
  67.                             if zluty:isTalking() then
  68.                                 room.zvon = room.zvon + 1
  69.                                 if odd(room.zvon) then
  70.                                     zluty.afaze = 1
  71.                                 else
  72.                                     zluty.afaze = 2
  73.                                 end
  74.                             elseif room.zvon > 0 then
  75.                                 room.zvon = room.zvon - 1
  76.                                 zluty.afaze = 0
  77.                             else
  78.                                 zluty:talk("bat-t-phone0", VOLUME_FULL)
  79.                             end
  80.                         else
  81.                             zluty:killSound()
  82.                             zluty.afaze = 0
  83.                             room.aktivni = ztel
  84.                             room.halo = 1
  85.                         end
  86.                     end
  87.                     zluty:updateAnim()
  88.                 end,
  89.                 [modry] = function()
  90.                     if room.poc == 0 then
  91.                         modry:killSound()
  92.                         room.poc = random(30) + 30
  93.                         room.aktivni = main
  94.                         modry.afaze = 0
  95.                     else
  96.                         room.poc = room.poc - 1
  97.                         if room.pronej > 0 then
  98.                             room.pronej = room.pronej - 1
  99.                         end
  100.                         if modry.X == mtel.X and modry.Y + 3 == mtel.Y then
  101.                             if modry:isTalking() then
  102.                                 room.zvon = room.zvon + 1
  103.                                 if odd(room.zvon) then
  104.                                     modry.afaze = 1
  105.                                 else
  106.                                     modry.afaze = 2
  107.                                 end
  108.                             elseif room.zvon > 0 then
  109.                                 room.zvon = room.zvon - 1
  110.                                 modry.afaze = 0
  111.                             else
  112.                                 modry:talk("bat-t-phone1", VOLUME_FULL)
  113.                             end
  114.                         else
  115.                             modry:killSound()
  116.                             modry.afaze = 0
  117.                             room.aktivni = mtel
  118.                             room.halo = 1
  119.                         end
  120.                     end
  121.                     modry:updateAnim()
  122.                 end,
  123.                 [ztel] = function()
  124.                     if room.halo ~= 2 then
  125.                         room.aktivni = main
  126.                         room.poc = random(100) + 30
  127.                     end
  128.                 end,
  129.                 [mtel] = function()
  130.                     if room.halo ~= 2 then
  131.                         room.aktivni = main
  132.                         room.poc = random(100) + 30
  133.                     end
  134.                 end,
  135.                 [ibudik] = function()
  136.                     if room.poc > 0 then
  137.                         room.poc = room.poc - 1
  138.                     elseif not ibudik:isTalking() then
  139.                         ibudik:talk("bat-t-budik", VOLUME_FULL, -1)
  140.                     elseif ibudik.dir ~= dir_no then
  141.                         ibudik:killSound()
  142.                         room.aktivni = -1
  143.                     end
  144.                 end,
  145.             }
  146.             if room.halo == 1 then
  147.                 room.halo = 2
  148.                 if pokus > 5 then
  149.                     pom1 = random(11)
  150.                 else
  151.                     pom1 = random(8)
  152.                 end
  153.                 local bin_table = {}
  154.                 switch(pom1){
  155.                     [0] = function()
  156.                         bin_table[0] = true
  157.                         bin_table[1] = true
  158.                     end,
  159.                     [1] = function()
  160.                         bin_table[0] = true
  161.                         bin_table[2] = true
  162.                         bin_table[4] = true
  163.                     end,
  164.                     [2] = function()
  165.                         bin_table[0] = true
  166.                         bin_table[3] = true
  167.                     end,
  168.                     [3] = function()
  169.                         bin_table[5] = true
  170.                     end,
  171.                     [4] = function()
  172.                         bin_table[4] = true
  173.                         bin_table[5] = true
  174.                     end,
  175.                     [5] = function()
  176.                         bin_table[1] = true
  177.                         bin_table[2] = true
  178.                     end,
  179.                     [6] = function()
  180.                         bin_table[0] = true
  181.                         bin_table[3] = true
  182.                         bin_table[4] = true
  183.                     end,
  184.                     [7] = function()
  185.                         bin_table[1] = true
  186.                     end,
  187.                     default = function()
  188.                         bin_table = {}
  189.                     end,
  190.                 }
  191.                 if bin_table[0] then
  192.                     room:planDialog(5, "bat-p-0")
  193.                 end
  194.                 if bin_table[1] then
  195.                     room:planDialog(5, "bat-p-1")
  196.                 end
  197.                 if bin_table[2] then
  198.                     room:planDialog(5, "bat-p-2")
  199.                 end
  200.                 if bin_table[3] then
  201.                     room:planDialog(5, "bat-p-3")
  202.                 end
  203.                 if bin_table[5] then
  204.                     room:planDialog(5, "bat-p-5")
  205.                 end
  206.                 if bin_table[4] then
  207.                     room:planDialog(5, "bat-p-4")
  208.                 end
  209.                 if countPairs(bin_table) == 0 then
  210.                     room:planDialog(5, "bat-p-zhov"..random(2))
  211.                 end
  212.                 planSet(room, "halo", 0)
  213.             end
  214.             if no_dialog() and isReady(small) and isReady(big) then
  215.                 if game_getCycles() == 20 and random(pokus) < 3 then
  216.                     addm(5, "bat-m-tohle")
  217.                 elseif room.mikros == 0 and dist(small, mikroskop) < 3 and mikroskop.dir ~= dir_no and random(10) == 1 then
  218.                     room.mikros = 1
  219.                     addm(6, "bat-m-mikro")
  220.                 elseif room.odsud == 0 and zluty.X > 32 and dist(small, zluty) < 4 and random(30) == 1 then
  221.                     room.odsud = 1
  222.                     addm(7, "bat-m-sluch")
  223.                 elseif room.teduz == 0 and room.aktivni == -1 and random(70) == 1 then
  224.                     room.teduz = 1
  225.                     addv(8, "bat-v-klid")
  226.                 elseif room.nemam > 0 then
  227.                     room.nemam = room.nemam - 1
  228.                 else
  229.                     switch(room.aktivni){
  230.                         [ibudik] = function()
  231.                             if random(100) == 1 then
  232.                                 room.nemam = 200 + random(200)
  233.                                 addv(1, "bat-v-vyp")
  234.                             end
  235.                         end,
  236.                         default = function()
  237.                             if room.aktivni == zluty or room.aktivni == modry then
  238.                                 if random(100) == 1 then
  239.                                     room.nemam = 200 + random(200)
  240.                                     if dist(small, room.aktivni) < dist(big, room.aktivni) then
  241.                                         addv(1, "bat-v-zved1")
  242.                                     else
  243.                                         addv(1, "bat-v-zved0")
  244.                                     end
  245.                                 end
  246.                             end
  247.                         end,
  248.                     }
  249.                 end
  250.             end
  251.             if no_dialog() then
  252.                 if room.pronej == 0 and (room.aktivni == zluty or room.aktivni == modry) and random(30) == 1 then
  253.                     room.pronej = random(100)
  254.                     planDialogSet(3, "bat-s-prome"..random(3), 111, snek, "mluvi")
  255.                 elseif room.uhnu == 0 and (room.aktivni == -1 or room.poc > 30 and room.aktivni == main) then
  256.                     room.uhnu = 300 + random(300)
  257.                     pom2 = random(4)
  258.                     if pom2 ~= 1 or roompole[1] > 0 then
  259.                         planDialogSet(12, "bat-s-snek"..pom2, 111, snek, "mluvi")
  260.                     end
  261.                     roompole[1] = roompole[1] + 1
  262.                 end
  263.             end
  264.             if room.uhnu > 0 then
  265.                 room.uhnu = room.uhnu - 1
  266.             end
  267.         end
  268.     end
  269.  
  270.     -- -------------------------------------------------------------
  271.     local function prog_init_dhled()
  272.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  273.  
  274.         dhled.padal = 0
  275.  
  276.         return function()
  277.             if dhled.padal == 4 then
  278.                 dhled.afaze = 0
  279.                 dhled.padal = 0
  280.             elseif dhled.padal == 3 then
  281.                 dhled.padal = 4
  282.             elseif dhled.padal == 2 then
  283.                 dhled.padal = 3
  284.             elseif dhled.dir == dir_down then
  285.                 dhled.padal = 1
  286.             elseif dhled.padal == 1 then
  287.                 dhled.afaze = 1
  288.                 dhled.padal = 2
  289.             end
  290.             dhled:updateAnim()
  291.         end
  292.     end
  293.  
  294.     -- -------------------------------------------------------------
  295.     local function prog_init_snek()
  296.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  297.  
  298.         snek.mluvi = 0
  299.  
  300.         return function()
  301.             if odd(game_getCycles()) and snek.mluvi ~= 0 then
  302.                 snek.afaze = random(2)
  303.             else
  304.                 snek.afaze = 0
  305.             end
  306.             snek:updateAnim()
  307.         end
  308.     end
  309.  
  310.     -- -------------------------------------------------------------
  311.     local function prog_init_ibudik()
  312.         return function()
  313.             if odd(game_getCycles()) and ibudik:isTalking() then
  314.                 ibudik.afaze = 1
  315.             else
  316.                 ibudik.afaze = 0
  317.             end
  318.             ibudik:updateAnim()
  319.         end
  320.     end
  321.  
  322.     -- -------------------------------------------------------------
  323.     local function prog_init_mikroskop()
  324.         local pom1, pom2, pomb1, pomb2 = 0, 0, false, false
  325.  
  326.         mikroskop.poc = 0
  327.  
  328.         return function()
  329.             if mikroskop.poc > 0 then
  330.                 mikroskop.poc = mikroskop.poc - 1
  331.             else
  332.                 mikroskop.afaze = random(3)
  333.                 mikroskop.poc = random(6)
  334.             end
  335.             if mikroskop.dir ~= dir_no then
  336.                 mikroskop.poc = 0
  337.             end
  338.             mikroskop:updateAnim()
  339.         end
  340.     end
  341.  
  342.     -- --------------------
  343.     local update_table = {}
  344.     local subinit
  345.     subinit = prog_init_room()
  346.     if subinit then
  347.         table.insert(update_table, subinit)
  348.     end
  349.     subinit = prog_init_dhled()
  350.     if subinit then
  351.         table.insert(update_table, subinit)
  352.     end
  353.     subinit = prog_init_snek()
  354.     if subinit then
  355.         table.insert(update_table, subinit)
  356.     end
  357.     subinit = prog_init_ibudik()
  358.     if subinit then
  359.         table.insert(update_table, subinit)
  360.     end
  361.     subinit = prog_init_mikroskop()
  362.     if subinit then
  363.         table.insert(update_table, subinit)
  364.     end
  365.     return update_table
  366. end
  367. local update_table = prog_init()
  368.  
  369.  
  370. -- -----------------------------------------------------------------
  371. -- Update
  372. -- -----------------------------------------------------------------
  373. function prog_update()
  374.     for key, subupdate in pairs(update_table) do
  375.         subupdate()
  376.     end
  377. end
  378.  
  379.